home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Audio, Video & Photo / Audacity 1.3.5 / audacity-win-unicode-1.3.5.exe / {app} / Plug-Ins / equalabel.ny < prev    next >
Lisp/Scheme  |  2007-12-18  |  5KB  |  142 lines

  1. ;nyquist plug-in
  2. ;version 3
  3. ;type analyze
  4. ;name "Regular Interval Labels..."
  5. ;action "Adding equally-spaced labels to the label track..."
  6. ;info "equalabel.ny by David R. Sky www.shellworld.net/~davidsky/ \nReleased under terms of the GNU General Public License version 2\nCreate equally spaced labels by choosing the number of labels or the interval\nbetween them. Making your final audio segment equal with others may slightly\nchange the label interval that you had set.\nNote: Equalabel.ny does not overwrite an existing label track, but adds to it.\nCode for label placement based on silencemarker.ny by Alex S.Brown."
  7.  
  8. ;control start "Time to place first label [seconds]" string " " "0.0"
  9. ;control placement "Label placement method" choice "Label interval,Number of labels" 0
  10. ;control time "Set either: Label interval [seconds]" string " " "60.0"
  11. ;control label-number "Or: Number of labels" int "" 10 2 100
  12. ;control text "Label text" string "" "Label"
  13. ;control prepend "Prepend numbers to label text?" choice "No - just use text,Yes" 1
  14. ;control include "Include final label?" choice "No,Yes" 0
  15. ;control t-choice "Final audio segment equal with others?" choice "No,Yes" 1
  16.  
  17. ; Regular interval labels by David R. Sky, June-October 2007.
  18. ; Released under terms of the GNU General Public License version 2
  19. ; http://www.gnu.org/copyleft/gpl.html
  20. ; Thanks Sami Jumppanen for plug-in suggestion.
  21. ; Thanks Alex S. Brown for code showing how to place labels.
  22. ; Thanks Dominic Mazzoni, Pierre M.I., Gale Andrews 
  23. ; for improvement suggestions.
  24.  
  25.  
  26. ; function to convert string to list
  27. (defun string-to-list (str)
  28. (read (make-string-input-stream (format nil "(~a)" str))))
  29.  
  30.  
  31. ; convert start string to a number
  32. (setf start (first (string-to-list start)))
  33.  
  34. ; convert time string to a number
  35. (setf time (first (string-to-list time)))
  36.  
  37. ; get selection duration in seconds,
  38. ; then subtract start offset
  39. (setf dur (- (/ len *sound-srate*) start))
  40.  
  41. ; give an error message 
  42. ; if user-set label interval is greater than selection duration,
  43. ; taking into accound start time offset
  44. (cond ; outermost cond
  45. ((and (> time dur) (= placement 0))
  46. (format nil
  47. "Including your time offset of ~a seconds, your requested~%label interval of ~a seconds is greater than the duration~%of your selected audio (~a seconds). ~%
  48. Please run this plug-in again using a smaller label interval. ~%" 
  49. start time dur))
  50.  
  51. (t ; label interval time is equal to or less than selection duration
  52.  
  53. ; choose between user-selected label interval or number of labels
  54. (cond 
  55. ((= placement 1) ; number of labels
  56. (setf time (if (= include 0)
  57. (float (/ dur label-number)) (1+ (float (/ dur label-number)))))
  58. (setf labels (if (= include 0) label-number (1+ label-number)))
  59. ) ; end placement 1
  60.  
  61. (t ; user-selected time interval
  62. ; calculate number of labels in selection
  63. ; this includes label at start of selection
  64. ; which is label number 0 if numbers are prepended to label text
  65. ; if final label is unwanted, decrement number of labels by 1
  66. (setf labels  (if (= include 0)
  67. (truncate (/ dur time))
  68. (+ 1 (truncate (/ dur time)))
  69. ) ; end if
  70. ) ; end setf labels
  71.  
  72. ; setf check-labels: number of labels if user includes last label
  73. ; this is for checking purposes in the [setf time ...] section of code
  74. (setf check-labels (+ 1 (truncate (/ dur time))))
  75.  
  76.  
  77. ; function to calculate new time value 
  78. ; if user value does not create equal duration final audio chunk
  79. ; returns new time value
  80. (defun new-time (time dur check-labels)
  81. ; calculate duration of last audio chunk
  82. (setf last-label (- dur (* time check-labels)))
  83. (if (< last-label (* time 0.5)) ; last chunk is less than 1/2 time
  84. (/ dur (- check-labels 1))
  85. (/ dur check-labels)
  86. ) ; end if
  87. ) ; end defun new-time
  88.  
  89.  
  90. (setf time ; depending whether user wants specified time used 
  91. ; or wants equal duration audio chunks including last chunk
  92. ; user time may create equal audio chunks even for last chunk
  93. (cond ; 1
  94. ((= t-choice 0) time) ; use user time value...
  95.  
  96. (t ; ...otherwise calculate time for equal duration audio chunks
  97. (cond ; 2 
  98. ; if user time value creates equal final audio segment duration anyway 
  99. ; then use user interval
  100. ((= dur (* time (- check-labels 1))) time)
  101.  
  102. ; user time value does not create equal duration audio chunks
  103. (t 
  104. (new-time time dur check-labels)
  105. ) ; end t
  106. ) ; end cond 2
  107. ) ; end of calculation for equal duration audio chunks
  108. ) ; end cond1
  109. ) ; end setf time
  110.  
  111. ) ; end t
  112. ) ; end cond choosing between user-set label interval or number of labels
  113.  
  114.  
  115. ; function to add labels to the label track
  116. ; from silencemarker.ny by Alex S. Brown
  117. (defun add-label (l-time l-text)
  118.  (setq l (cons (list l-time l-text) l)))
  119.  
  120.  
  121. ; function to prepend label number before label text
  122. (defun prepend-number (i text)
  123. (format nil "~a~a" i text))
  124.  
  125.  
  126. ; initialize blank label track
  127. (setq l nil)
  128.  
  129. ; add the labels
  130. (dotimes (i labels)
  131. (if (= prepend 1) ; prepend numbers to label text?
  132. (add-label (+ start (* i time)) (prepend-number i text)) ; yes
  133. (add-label (+ start (* i time)) text) ; no
  134. ) ; end if
  135. ) ; end dotimes i
  136.  
  137. ; return label track
  138. l
  139.  
  140. ) ; close t of outermost cond
  141. ) ; end outermost cond
  142.